package com.enzoism.springboot.dive.bis.collection;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

/**
 * 进行集合遍历，遍历的时候进行数据添加和移除
 * 1）添加-使用ListIterator进行添加
 * 2）删除-使用Iterator进行移除
 * 3）切记：一定不能直接对list进行add/remove
 *
 * 开发原则
 * 1）不要在foreach中进行remove/add,使用Iterator,如果是并发操作需要加锁
 * 2）使用entrySet遍历Map类集合KV，而不是KeySet方式进行遍历
 */
public class ListTest {
    public static void main(String[] args) {

        List<String> list = ListTest.initData();
        // 简单迭代
//        iteratorData(list);
        // 带有顺序的迭代
//        iteratorSortData(list);
        // 迭代时添加数据
//        iteratorAddData(list);
        // 迭代时移除数据
        iteratorRemoveData(list);

    }

    public static List<String> initData() {
        List<String> list = new ArrayList<>();
        list.add("value1");
        list.add("value2");
        list.add("value3");
        list.add("value4");
        return list;
    }

    public static void iteratorData(List<String> list) {
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
            System.out.println("-------list:" + iterator.next());
        }
    }

    public static void iteratorSortData(List<String> list) {
        ListIterator<String> iterator = list.listIterator();
        while (iterator.hasNext()) {
            System.out.println("-------list:" + iterator.next());
        }
        System.out.println();
        while (iterator.hasPrevious()) {
            System.out.println("-------list:" + iterator.previous());
        }
    }

    public static void iteratorAddData(List<String> list) {
        ListIterator<String> iterator = list.listIterator();
        while (iterator.hasNext()) {
            String value = iterator.next();
            if ("value2".equals(value)){
                iterator.add("value5");
            }
        }
        System.out.println("-------list:" + list);
    }

    public static void iteratorRemoveData(List<String> list) {
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
            String value = iterator.next();
            if ("value2".equals(value)){
                iterator.remove();
            }
        }
        System.out.println("-------list:" + list);
    }
}
